BCard.dat
BCard.dat is pure clientside file. It is not needed on the server, unless as some kind of "helper". This file only carries how should given BCard string be displayed in the client.
Format
#=============================================================
VNUM {BCardVNUM}
ICON {always -1, does't work sadly}
NAME {BCardCategoryCodeName}
DESC {BCardSub1DisplayType} {BCardSub2DisplayType} [...]
SUBJ1 {BCardSubject1CodeName}
SUBJ2 {BCardSubject2CodeName}
[...]
LIST1-1 {BCardList1-1CodeName}
LIST1-2 {BCardList1-2CodeName}
LIST2-1 {BCardList2-1CodeName}
LIST2-2 {BCardList2-2CodeName}
[...]
END
#=============================================================
There can be different amount of records, so i just used [...]
. I don't think it's the limit, but currently in the client there is up to 5 records per BCard VNUM.
What is a BCard?
BCard is an orange effect present in skills, buffs, items, mobs and more. Each BCard VNUM is like a category. Let's look at an example:
VNUM 19
ICON -1
NAME Move
DESC 0 1 1 1 0
SUBJ1 Interrupts movement
SUBJ2 Changes movement speed.
SUBJ3 zts946e
SUBJ4 Increases/decreases movement speed.
SUBJ5 zts650e
LIST1-1 Movement impossible
LIST1-2 Movement impossible
LIST2-1 Movement speed is increased by %s%%.
LIST2-2 Movement speed is decreased by %s%%.
LIST3-1 Your movement speed is increased by %s while you are hidden.
LIST3-2 Your movement speed is decreased by %s while you are hidden.
LIST4-1 Movement speed is increased by %s.
LIST4-2 Movement speed is decreased by %s.
LIST5-1 Your speed is temporarily maximised.
LIST5-2 Your speed is temporarily maximised.
END
To make example more clear I replaced all zts...
with actual translations
Every BCard with VNUM
(BCardVNUM
) 19 will be related to movement speed.
SUBJX
BCardSubjectXCodeName
is useless for the client. It only helps programmers while creating/using BCards I guess?
How typical BCard structure works?
BCards are used inside Item.data, Skill.dat, monster.dat etc. Below you can see typical structure for one BCard:
{BCardVNUM} {EffectVal_1} {EffectVal_2} {BCardSub} {Target}
That mean:
Field | Description |
---|---|
BCardVNUM | Bcard VNUM |
EffectVal_1 | EffectVal_1's sign (positive/negative) defines which Y to use (negative values will result in displaying LIST{X}-2 , while positive will result in LIST{X}-1 ) Read more |
EffectVal_2 | A value whose meaning varies according to DESC Read more |
BCardSub | Defines which X from LIST{X}-{Y} use (note that BCardSub starts from 0, while in LIST it starts from 1, so you have to add 1) |
Target |
DESC
Defines how should variables be put inside the string.
DESC value | Description | |
---|---|---|
0 | No variables inserted | |
1 | One (first) variable used as a number, so the first | 🔢 |
2 | Two variables (both) are used as numbers.
| 🔢🔢 |
3 |
warning if BCard VNUM is equal to 46, both variables should be treated as mobs (this in the only exception) | 🔢🐮 |
4 |
| 🔢✨ |
5 |
| 🧝🔢 |
6 |
| 🔢💪 |
%%
is just "%" escaped.
That mean Reduces remaining HP by %s%%.
will be Reduces remaining HP by 20%.
Example
Feelers (Vnum: 218)
[...]
BUFF 24 48 280 0 0 0 [...]
[...]
That mean:
buff field name | value | Note |
---|---|---|
BCardVNUM | 24 |
|
EffectVal_1 | 48 | Is |
EffectVal_2 | 280 | 48 |
BCardSub | 0 | |
Target | 0 |
-
Check VNUM
24
inBCard.dat
-
Calculate
X
inLIST{X}-{Y}
X = BCardSub + 1
-
Calculate
Y
inLIST{X}-{Y}
if buff.EffectVal_1 > 0:
Y = 1
else:
Y = 2 -
Get correct
zts...
In our case its
LIST1-1
andzts318e
(Increases damage against %s by %s.
) -
Check
DESC
In our case
X = 1
soo we need to read first variable inDESC
. In our case it5
which mean race + number -
Replace
%s
- replace first
%s
with race name - replace second
%s
with number (abs(floor({EffectVal_2}/4))
)
In our case
Increases damage against High-level monster by 70.
- replace first